home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc32 / vustd.h < prev    next >
C/C++ Source or Header  |  1999-03-06  |  7KB  |  178 lines

  1. /*  VUstd.h
  2.  
  3.   vector management functions for data type "unsigned".
  4.  
  5.   Copyright (c) 1996-1999 by Martin Sander
  6.   All Rights Reserved.
  7. */
  8.  
  9. #ifndef __VUSTD_H
  10. #define __VUSTD_H
  11.  
  12. #if !defined( __VECLIB_H )
  13.    #include <VecLib.h>
  14. #endif
  15.  
  16. #ifdef __cplusplus
  17.     extern "C" {
  18. #endif
  19.  
  20. /*********************  Generation ***********************************/
  21.  
  22. uVector  __vf  VU_vector( ui size );
  23. uVector  __vf  VU_vector0( ui size );
  24.  
  25. /***************  Addressing single vector elements ******************/
  26.  
  27. unsigned _VFAR * VU_Pelement( uVector X, ui n );
  28.       /* returns a pointer to the n'th element of X. For the memory model
  29.          HUGE, the pointer is normalized. */
  30. #define VU_element( X, n )  (*VU_Pelement( X, n ))
  31.  
  32. /****************** Initialization  ******************************/
  33.  
  34. void  __vf  VU_equ0( uVector X, ui size );
  35. void  __vf  VU_equC( uVector X, ui size, unsigned C );
  36. void  __vf  VU_equV( uVector Y, uVector X, ui size );
  37. void  __vf  VUo_ramp( uVector X, ui size, unsigned Start, int Rise );
  38. #ifdef V_trapIntError
  39.     #define VU_ramp   VUo_ramp
  40. #else
  41.     void  __vf  VU_ramp( uVector X, ui size, unsigned Start, int Rise );
  42. #endif
  43. long  __vf  VU_random( uVector X, ui size, long seed,
  44.                        unsigned MinVal, unsigned MaxVal );
  45.                               /*  returns new seed */
  46.  
  47.  
  48. /************** Data-type interconversions  ***************************/
  49.  
  50. void  __vf   Vo_ItoU( uVector Y, iVector X, ui size );  /* signed-unsigned */
  51. void  __vf   Vo_UtoI( iVector Y, uVector X, ui size );
  52.  
  53. void  __vf   V_UStoU(  uVector  Y, usVector X, ui size );  /* up-conversion */
  54. void  __vf   V_UtoUL(  ulVector Y, uVector  X, ui size );
  55.  
  56. void  __vf   Vo_UtoUS( usVector Y, uVector  X, ui size ); /* down-conversion */
  57. void  __vf   Vo_ULtoU( uVector  Y, ulVector X, ui size );
  58. #ifdef V_trapIntError
  59.     #define V_ItoU    Vo_ItoU
  60.     #define V_UtoI    Vo_UtoI
  61.     #define V_UtoUS   Vo_UtoUS
  62.     #define V_ULtoU   Vo_ULtoU
  63. #else
  64.     void  __vf   V_ItoU( uVector Y, iVector X, ui size );
  65.     void  __vf   V_UtoI( iVector Y, uVector X, ui size );
  66.     void  __vf   V_UtoUS( usVector Y, uVector  X, ui size );
  67.     void  __vf   V_ULtoU( uVector  Y, ulVector X, ui size );
  68. #endif
  69.  
  70. void  __vf   V_UtoF(   fVector Y, uVector  X, ui size );
  71. void  __vf   V_UtoD(   dVector Y, uVector  X, ui size );
  72. #ifdef __BORLANDC__
  73.     void  __vf   V_UtoE(   eVector Y, uVector  X, ui size );
  74. #else  /* no 80-bit IEEE reals with Visual C++ */
  75.     #define V_UtoE V_UtoD
  76. #endif
  77.  
  78.  
  79. /************** Index-oriented manipulations ***************************/
  80.  
  81. void  __vf  VU_rev( uVector Y, uVector X, ui size );
  82. #ifdef V_HUGE
  83.     void  __vf  VU_rotate( uVector Y, uVector X, ui size, long pos );
  84. #else
  85.     void  __vf  VU_rotate( uVector Y, uVector X, ui size, int pos );
  86. #endif
  87.  
  88. void  __vf  VU_delete( uVector X, ui size, ui pos );
  89. void  __vf  VU_insert( uVector X, ui size, ui pos, unsigned C );
  90.  
  91. void  __vf  VU_sort( uVector Y, uVector X, ui size, int dir );
  92. void  __vf  VU_sortind( uiVector Ind, uVector X, ui size, int dir );
  93.  
  94. void  __vf  VU_subvector( uVector Y, ui sizey, uVector X, int samp );
  95. void  __vf  VU_subvector_equC( uVector Y, ui subsz, unsigned samp,
  96.                                unsigned C );
  97. void  __vf  VU_subvector_equV( uVector Y, ui subsz, unsigned samp,
  98.                                uVector X );
  99. void  __vf  VU_indpick( uVector Y, uiVector Ind, ui sizey, uVector X );
  100. void  __vf  VU_indput(  uVector Y, uVector X, uiVector Ind, ui sizex );
  101.  
  102. ui    __vf  VU_searchC( uVector XTab, ui size, unsigned C, int mode );
  103. void  __vf  VU_searchV( uiVector Ind, uVector X, ui sizex,
  104.                         uVector Tab, ui sizetab, int mode );
  105.  
  106. /********************   One-dimensional Vector Operations  ********/
  107.  
  108. unsigned __vf  VUo_sum( uVector X, ui size );
  109. void     __vf  VUo_runsum( uVector Y, uVector X, ui size );
  110. #ifdef V_trapIntError
  111.     #define VU_sum       VUo_sum
  112.     #define VU_runsum    VUo_runsum
  113. #else
  114.     unsigned __vf  VU_sum( uVector X, ui size );
  115.     void     __vf  VU_runsum( uVector Y, uVector X, ui size );
  116. #endif
  117. unsigned  __vf  VU_max( uVector X, ui size );
  118. unsigned  __vf  VU_min( uVector X, ui size );
  119. unsigned  __vf  VU_maxind( ui _VFAR *Ind, uVector X, ui size );
  120. unsigned  __vf  VU_minind( ui _VFAR *Ind, uVector X, ui size );
  121. double    __vf  VU_fsum( uVector X, ui size );
  122. double    __vf  VU_mean( uVector X, ui size );
  123. void      __vf  VU_runmax( uVector Y, uVector X, ui size );
  124. void      __vf  VU_runmin( uVector Y, uVector X, ui size );
  125.  
  126. int       __vf  VU_iselementC( uVector Tab, ui size, unsigned  C );
  127. ui        __vf  VU_iselementV( uVector Y, uVector X, ui sizex,
  128.                                uVector Tab, ui sizetab );
  129.  
  130.  
  131. /************************ Input / Output ******************************/
  132.  
  133. void  __vf   V_ifprint(  FILE _VFAR *stream, void _VFAR *X, ui size,
  134.                   unsigned nperline, unsigned linewidth, unsigned vers );
  135. #define VU_fprint( st, x, sz, npl, lw )  \
  136.              V_ifprint(  st, (void _VFAR *)(x), sz, npl, lw, 5 )
  137.  
  138. #if !defined _Windows || defined __FLAT__ || defined _WIN32
  139.     void __vf  V_icprint(  void _VFAR *X, ui size, unsigned nperline, unsigned vers );
  140.     #define VU_cprint( x, sz, npl )  V_icprint( (void _VFAR *) (x), sz, npl, 5 )
  141. #endif
  142. #define VU_print( x, sz, npl )  \
  143.              V_ifprint(  stdout, (void _VFAR *)(x), sz, npl, 80, 5 )
  144.  
  145. void  __vf   V_setRadix( int radix );
  146.            /* radix to be assumed by all whole-number read functions V??_read */
  147. void  __vf   VU_read( uVector X, ui size, FILE _VFAR *stream );
  148. void  __vf   VU_write( FILE _VFAR *stream, uVector X, ui size );
  149. void  __vf   VU_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
  150. void  __vf   VU_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
  151. void  __vf   VU_setWriteFormat( char _VFAR *FormatString );
  152.                                             /* for VU_write and VU_nwrite */
  153. void  __vf   VU_setWriteSeparate( char _VFAR *SepString ); /* for VU_write */
  154. void  __vf   VU_setNWriteSeparate( char _VFAR *SepString ); /* for VU_nwrite */
  155. #ifdef V_HUGE
  156.     void  __vf   VU_store(  FILE _VFAR *stream, uVector X, ui size );
  157.     void  __vf   VU_recall( uVector X, ui size, FILE _VFAR *stream );
  158. #else
  159.     #ifdef __cplusplus
  160.          void  inline VU_store( FILE _VFAR *stream, uVector X, ui size )
  161.          {    fwrite( X, sizeof(unsigned), size, stream ); 
  162.          }
  163.          void  inline VU_recall( uVector X, ui size, FILE _VFAR *stream )
  164.          {    fread(  X, sizeof(unsigned), size, stream );
  165.          }
  166.     #else
  167.         #define VU_store( str, X, sz )  \
  168.                      fwrite( X, sizeof(unsigned), sz, str )
  169.         #define VU_recall( X, sz, str ) \
  170.                      fread(  X, sizeof(unsigned), sz, str )
  171.     #endif
  172. #endif      /* VU_store, VU_recall in binary format */
  173.  
  174. #ifdef __cplusplus
  175. }
  176. #endif
  177. #endif   /*  __VUSTD_H    */
  178.